package com.yang.common.model;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 在接口模块-策略模块-短信网关模块需要做校验和封装的POJO类对象
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StandardSubmit implements Serializable {
    /**
     * 针对当前短信的唯一标识,即平台（短信平台系统）内的短信id，类似于存档号
     * 单条短信接口返回值的sid字段也是这个，后期存储搜索模块的id也是这个。
     * 来源：雪花算法生成
     */
    private Long sequenceId;

    /**
     * 客户端ID，对应client_business，客户信息表的主键id，可以通过根据apiKey查询缓存得到，避免再去查库
     * 来源：查缓存
     */
    private Long clientId;

    /**
     * 客户端的ip白名单，client_business，客户信息表中的ip_address字段。
     * 来源：查缓存
     */
    private List<String> ip;

    /**
     * 客户业务内的uid，对应的是单条短信接口请求参数的uid，是客户业务系统内的ID，
     * 来源：客户穿过开的
     */
    private String uid;

    /**
     * 目标手机号，
     * 来源：客户穿过来的
     */
    private String mobile;

    /**
     * 短信内容的签名，对应client_sign客户签名表的sign_info
     * 来源：只需要基于客户传过来的短信内容中的【】获取出来
     */
    private String sign;

    /**
     * 短信内容
     * 来源：客户传递过来
     */
    private String text;

    /**
     * 短信的发送时间
     * 来源：当前系统时间
     */
    @JsonSerialize(using = LocalDateTimeSerializer.class)//手动指定序列化格式
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)//手动指定反序列化格式
    private LocalDateTime sendTime;

    /**
     * 当前短信的费用
     * 来源：基于客户的短信内容文字，计算出来，70字一条，超过为67一条,单位为厘
     */
    private Long fee;

    /**
     * 目标手机号的运营商，对应mobile_area手机号区域表的mobile_type字段
     * 1-移动 2-联通 3-电信
     * 来源：策略模块搞定
     */
    private Integer operatorId;


    /**
     * 目标手机号的归属地区号  0451  0455
     * 对应mobile_area手机号区域表的mobile_area字段
     * 来源：策略模块搞定 ，目前三方查询不到，先忽略掉
     */
    private Integer areaCode;

    /**
     * 目标手机号的归属地  哈尔滨，  绥化~
     * 来源：策略模块搞定
     */
    private String area;

    /**
     * 通道下发的源号码  106934985673485645，就是下发短信的号码
     * channel表的channel_number字段 + client_channel表的client_channel_number字段
     * 来源：策略模块搞定
     */
    private String srcNumber;

    /**
     * 通道的id信息
     * 通道表channel表的id
     * 来源：策略模块搞定
     */
    private Long channelId;

    /**
     * 短信的发送状态， 0-等待ing，1-成功，2-失败，默认为0
     * 策略处理
     */
    private Integer reportState;

    //===============================================

    /**
     * 客户端真实的IP地址
     * 来源：api模块的controller的getRealIP获取
     */
    private String realIP;

    /**
     * 请求携带的apiKey封装
     * 来源：客户传递过来
     */
    private String apikey;

    /**
     * 短信的类型  0-验证码短信 1-通知类短信 2-营销类短信
     * 来源：客户传递过来
     */
    private Integer state;

    /**
     * 签名id
     * 来源：查缓存
     */
    private Long signId;

    /**
     * 短信发送失败原因
     * 来源：策略服务处理
     */
    private String errorMsg;

    /**
     * 是否携号转网了,默认没有携号转网
     * 来源:策略服务处理
     */
    private Boolean isTransfer = false;

    /**
     * 1h限流发送时间
     * 来源：策略服务
     */
    private Long oneHourLimitMilli;
    // todo 后续再做封装~~~~
}
